import axios from 'axios'
import { useUserStore } from '@/stores'
import { ElMessage } from 'element-plus'
import router from '@/router'

export const baseURL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:4000'

const axiosInstance = axios.create({
  baseURL: baseURL,
  timeout: 5000,
})

// 请求拦截器，自动添加 Token
axiosInstance.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = `Bearer ${userStore.token}`
    } else {
      console.warn('Token 未设置，请检查登录逻辑')
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  },
)

// 响应拦截器，处理错误
axiosInstance.interceptors.response.use(
  (response) => {
    // 确保返回的数据是 JSON 格式
    if (typeof response.data === 'string') {
      try {
        response.data = JSON.parse(response.data) // 如果是字符串，尝试解析为 JSON
      } catch (error) {
        console.error('响应数据不是有效的 JSON:', response.data)
        throw new Error('响应数据格式错误')
      }
    }
    return response
  },
  (error) => {
    if (error.response && error.response.status === 401) {
      const userStore = useUserStore()
      userStore.clearUser() // 清除无效的 Token 和用户信息
      router.push('/login') // 跳转到登录页面
      ElMessage.error('登录已过期，请重新登录')
    } else if (error.response && error.response.status === 400) {
      ElMessage.warning(error.response.data.message || '请求错误')
    }
    return Promise.reject(error)
  },
)

export const request = axiosInstance // 确保正确导出 request

